
use serde::{Deserialize, Serialize};
use rust_web_server::http_server::{ContentType, HttpMethod, HttpStatus};
use rust_web_server::web_server::{HttpContext, run, send_json, Server};
#[derive(Serialize, Deserialize)]
struct Stu {
    name: String,
    age: u8,
    id: u32
}

fn main() {

    //创建服务器实例，new()里的参数是线程数量
    let mut server = Server::new(4);
    //设置连接超时时间为10s
    server.set_timeout_sec(10);
    //注册处理请求的函数，第一个参数是该函数处理的请求方法类型
    //第二个参数是该处理函数的映射路径
    //第三个参数存放Fn闭包的Box


    //定义处理http请求的函数，参数需要一个http上线文
    //HttpContext里提供了请求和响应
    server.register_handler(HttpMethod::Get, "/json", Box::new(|mut ctx| {

        //是否允许前端跨域
        ctx.get_response().allowed_cross_origin();

        //调用该函数可以发送Json数据， 参数为HttpContext，需要发送的实体和响应状态码
        send_json(&mut ctx, &Stu { name: "abc".to_string(), age: 33, id: 28798438 }, HttpStatus::OK).unwrap();
    }));

    //调用run方法运行，并提供监听地址
    run(server, "127.0.0.1:8080");

    //最后访问http://127.0.0.1:8080/json,你就能得到一个json字符串
}